##############
####FUNO####
##############

les<- function (x, atr,K , r, destaque)
{			
  ##Fazendo uma anlise exploratria nos argumentos				
  if(missing(K) & missing(r))              				#Analisando se o usurio colocou o arg r ou K
  {
    return("Necessrio informar o argumento K ou r")			#Retornando uma msg caso o arg r ou K esteja faltando
  }
  if(missing(x))							#Analisando se o usurio colocou o arg x
  {
    return("Necessrio informar o data.frame de entrada no argumento x")#Retornando uma msg caso o arg x esteja faltando
  }
  if(missing(atr))							#Analisando se o usurio colocou o arg atr
  {
    return("Necessrio informar quais so os atributos a serem analisados no argumento atr") ##Retornando uma msg caso o argumento atr esteja faltando
  }
  ##Criando objeto que ser trabalhado dentro da funo
  atr.df<- data.frame(x[atr])                				#Transpondo os atributos do data.frame x para o data.frame atr.df
  ##Analisando qual ser o tamanho da janela grfica que ser necessria para plotar as relaes entre os atributos
  tam <- length(atr)                          				#Guardando a quantidade de atributos que o usurio ir anlisar
  lado<- sqrt(tam)                            				#Tirando a raiz da quantidade de atributos para montar a janela grfica                             
  hor <- ceiling(lado)                        				#A quantidade de grficos na horizontal sempre ser o valor da raiz arredondado para cima
  ver <- round(lado)                          				#A quantidade de grficos na vertical sempre ser o valor da raiz arredondada segundo a regra de arredondamento
  x11()                                       				#Abrindo janela grfica
  par(mfrow = c(hor,ver), bty = "l")                     		#Essa relao vai ajustar os grficos da forma mais prximo do timo para que eles no fiquem pequenos e ao mesmo tempo no sobrem "janelas vazias"
  
  
  ##Vendo quais atributos esto correlacionados com o K, e converso dos valores dos atributos para o ndice
  if(!missing(K))                            				#Vendo se o usurio usou o arg K para indicar alguma estratgia
  {
    indice= data.frame(rep(NA,length(atr.df[,1])))			#Criando um data.frame para guardar os valores do ndice do ciclo
    for (i in 1:tam)                            			#Iniciando o ciclo que ir fazer os teste entre os atrs e o atr K
    {
      mod <- lm(K~atr.df[,i])                    			#Criando o modelo 
      suppressWarnings(teste <- anova(mod))				#Testando se o modelo  significativo, coloquei o comando suppressWarnings, pois um dos modelos ir analisar a relao entre a mesma coluna do data.frame de entrada, e nessa situao h a sada de uma warning message que no  necessria 
      nome.y <- colnames(atr.df)[i]					#Criando o nome que ser atribuido ao eixo y no plot do modelo
      titulo<- c("Valor do teste" , round(teste$`Pr(>F)`, 3))		#Criando o nome que ser atribuido ao ttulo no plot do modelo que  o valor de p no teste anova
      plot(atr.df[,i]~K, ylab = as.graphicsAnnot(nome.y),  main = as.graphicsAnnot(titulo))  #Plotando a relao entre os atrs
      if(teste$`Pr(>F)`[1]<0.05)                			#Vendo se o modelo  significativo
      {
        if(mod$coefficients[2]>0)               			#Vendo se a relao entre os atributos  positiva
        {
          indice[i]= (atr.df[i]-min(atr.df[i]))/(max(atr.df[i])-min(atr.df[i])) #Calculando o indice para os atributos positivamente relacionados ao atr. K
        }
        else               						#Caso a relao entre os atributos seja negativa em relao a K
        {
          indice[i]= abs((atr.df[i]-min(atr.df[i]))/(max(atr.df[i])-min(atr.df[i]))-1) #Calculando o indice para os atributos negativamente relacionados ao atr. K
        }
      }
      else								#Caso a relao entre os atr no seja significativa 
      {
        indice[i]<- rep(NA, length(atr.df[i]))				#Atribuindo NAs ao data.frame pois a relao no  siginificativa
      }
    }
  }
  ##Vendo quais atributos esto correlacionados com o r, e converso dos valores dos atributos para o ndice, essa parte  muito parecida com a do K, s invertendo alguns sinais
  else									#Caso o usurio tenha usado o arg. r para indicar alguma estratgia
  {
    indice= data.frame(rep(NA,length(atr.df[,1])))			#Criando um data.frame para guardar os valores do ndice do ciclo
    for (i in 1:tam)                					#Iniciando o ciclo que ir fazer os teste entre os atrs e o atr r            
    {
      mod <- lm(r~atr.df[,i])                    			#Criando o modelo
      suppressWarnings(teste <- anova(mod))				#Testando se o modelo  significativo, coloquei o comando suppressWarnings, pois um dos modelos ir analisar a relao entre a mesma coluna do data.frame de entrada, e nessa situao h a sada de uma warning message que no  necessria
      nome.y <- colnames(atr.df)[i]					#Criando o nome que ser atribuido ao eixo y no plot do modelo
      titulo<- c("Valor do teste" , round(teste$`Pr(>F)`, 3))		#Criando o nome que ser atribuido ao ttulo no plot do modelo que  o valor de p no teste anova
      plot(atr.df[,i]~r, ylab = as.graphicsAnnot(nome.y),  main = as.graphicsAnnot(titulo)) #Plotando a relao entre os atrs
      if(teste$`Pr(>F)`[1]<0.05)                			#Vendo se o modelo  significativo
      {
        if(mod$coefficients[2]<0)               			#Vendo se a relao entre os atributos  negativa
        {
          indice[i]= (atr.df[i]-min(atr.df[i]))/(max(atr.df[i])-min(atr.df[i])) ##Calculando o indice para os atributos negativamente relacionados ao atr. r
        }
        else               						#Caso a relao entre os atributos seja positiva em relao a r
        {
          indice[i]= abs((atr.df[i]-min(atr.df[i]))/(max(atr.df[i])-min(atr.df[i]))-1) #Calculando o indice para os atributos positivamente relacionados ao atr. r
        }
      }
      else								#Caso a relao entre os atributos no seja significativa
      {
        indice[i]<- rep(NA, length(atr.df[i]))				#Atribuindo NAs ao data.frame pois a relao no  siginificativa			
      }
    }
  }
  indice <- indice[,colSums(is.na(indice))<nrow(indice)]		#Excluindo as colunas com NAs (que no foram significativa)
  if(class(indice) == "numeric")					#Vendo se houve correlao com pelo menos mais um atributo para a contruo do ndice
  {
    return("O atributo referente a estratgia no se relaciona com nenhum outro, insira outro atributo como referncia") #Retornando ao usurio o aviso de falta de correlao
  }
  indice$media<- apply(indice, 1, mean)					#Tirando a mdia do ndice dos atrs
  x$indice <- indice$media						#atribuindo o valor da mdia a mais uma coluna do data.frame de entrada
  as.factor(destaque)						#Convertendo a coluna de destaque em fatores
  x11()									#Abrindo uma janela grfica para expor ao usurio o valor do ndice em relao a caracterstica de destaque
  par(mfrow = c(1,1), bty = "l")					#Alterando os parmetros grficos
  plot(x$indice, destaque, xlab = "Indice de r a K") #Abrindo janela grfica
  return(x)								#Retornando ao usurio o data.frame de entrada com a coluna a mais com o valor do dice
}



###########################################
##Criando Data.frame para aplicar funo###
###########################################

sp<-rep(c("sp1","sp2","sp3","sp4","sp5"),each = 6)
dap<- rnorm(30, 24, 8.3)
LMA<- sort(runif(30, 10, 1000))
Amass<- sort(runif(30, 9, 400), decreasing = TRUE)
Nmass<- sort(runif(30, 1,10),decreasing = TRUE)
alt<-  rnorm(30, 14, 4.3)
LL<- sort(runif(30, 1, 100))

dado<- data.frame(sp, dap, LMA, Amass,Nmass, alt,LL)

#########################
###Aplicando a funo ###
#########################

les(dado, K = dado$LL, destaque = dado$sp, atr = c(2:7))



DVIDAS:
1. Enquanto eu desenvolvia a funo percebi que algumas coisas que eu havia proposta eram um tanto quanto redundantes, logo resolvi mudar algumas coisas como por exemplo:
	a. Retirar o argumento caractersticas
	b. Pensei em colocar como na sada final da funo um grfico no qual o y so os fatores de alguma carac. que o usurio quer ver em que faixa do ndice est
2. Outro problema que estou tendo  em relao ao grfico final
	a. No consegui colocar o ttulo do eixo y como o nome da coluna destaque, pesquisei as formas de faz-lo mas no consegui
	b. Outra coisa que no consegui mexer nesse grfico so os seus valores, eu gostaria que cada tick fosse referente a uma nvel (pois essa varivel  um fator)

